import { http, toast} from '@/uni_modules/uview-plus'
import { log } from '@/utils/log'
import { signatureGenerate } from '@/utils/md5/index'
import { useUserStore } from '@/store/user'
const getUser = ()=>{
	const userStore = useUserStore()
	return{
		token:userStore.user_info.token || ''
		// user_id:userStore.user_id,
		// login_code:userStore.login_code,
	}
}
const requestInterceptors=(vm)=>{
	/**
	 * 请求拦截
	 * @param {Object} http
	 */
	http.interceptors.request.use(
		(config) => { // 可使用async await 做异步操作
			const user = getUser()
			config.header = Object.assign(config.header, user) || {}
			console.log(config.header,'config.headerconfig.header')
			
			if(config.custom.needLogin === true){
				//执行必须登录情况下的操作
				if(!user.token){
					uni.reLaunch({
						url:'/pages/login/index'
					})
					return Promise.reject(config)
				}
			}
			// post 请求
			if(config.method == "POST"){
				// 初始化请求拦截器时，会执行此方法，此时data为undefined，赋予默认{}
				// config.data = Object.assign(config.data, user) || {}
				// 添加签名
				// config.data = Object.assign(config.data, signatureGenerate(config.data))
			}
			// get 请求
			if(config.method == "GET"){
				// 初始化请求拦截器时，会执行此方法，此时data为undefined，赋予默认{}
				// config.params = Object.assign(config.params, user) || {}
				// 添加签名
				// config.params = Object.assign(config.params, signatureGenerate(config.params))
			}
			
			// console.log(config)
			uni.showLoading({
				title:'加载中'
			})
			return config
		},
		(config) => {
			// 可使用async await 做异步操作
			return Promise.reject(config)
		} 
	)
}
const responseInterceptors=(vm)=>{
	/**
	 * 响应拦截
	 * @param {Object} http 
	 */
	http.interceptors.response.use((response) => { /* 对响应成功做点什么 可使用async await 做异步操作*/
		uni.hideLoading()
		const data = response.data
		// 自定义参数
		const custom = response.config?.custom
		if(data.status == 5){
			// 去实名
			toast(data.msg)
			uni.navigateTo({
				url:'/pages/mine/real_authentication'
			})
			return Promise.reject(data)
		} else if (data.status != 1) { // 服务端返回的状态码不等于1，则reject()
			log.warning(`➷➷➷`,`${response.config.url}`)
			console.log('接口返回', data)
			// log.warning(`➹➹➹`,`${response.config.url}`)
			if(data.status == -1){
				//登录过期
				useUserStore().exitLogin()
				uni.clearStorageSync()
				uni.reLaunch({
					url:'/pages/login/index'
				})
			}
			
			// 如果没有显式定义custom的toast参数为false的话，默认对报错进行toast弹出提示
			if (custom.toast !== false) {
				toast(data.msg)
			}
			return Promise.reject(data)
			// // 如果需要catch返回，则进行reject
			// if (custom?.catch) {
			// 	return Promise.reject(data)
			// } else {
			// 	// 否则返回一个pending中的promise
			// 	return new Promise(() => { })
			// }
		} else {
			log.success(`➷➷➷`,`${response.config.url}`)
			console.log('接口返回', data)
		}
		
		return data.data || {}
	}, (response) => { /*  对响应错误做点什么 （statusCode !== 200）*/
		uni.hideLoading()
		log.error(`➷➷➷`,`${response?.url}`)
		console.log(`请求拒绝`,response)
		// log.error(`➹➹➹`,`${response?.url}`)
		const status = response?.data?.status
		
		if(response?.custom?.needLogin === true){
			const user = getUser()
			if(!user.token){
				//登录过期
				toast('请先登录')
				useUserStore().exitLogin()
				uni.clearStorageSync()
				uni.reLaunch({
					url:'/pages/login/index'
				})
			}
		}else{
			toast('网络错误')
		}
		
		return new Promise(() => { })
	})
}


export {
	requestInterceptors,
	responseInterceptors
}


